package com.yzq.api.aliyunai.model;

import cn.hutool.core.annotation.Alias;
import com.yzq.api.aliyunai.enums.TaskStatusEnum;
import lombok.Data;

import java.io.Serializable;
import java.util.List;


/**
 * 文生图任务完整响应类
 */
@Data
public class AIResponse implements Serializable {
    /**
     * 任务输出信息（响应体核心内容）
     */

    @Alias("code")
    private String code;

    @Alias("message")
    private String message;

    @Alias("request_id")
    private String requestId;

    @Alias("output")
    private Output output;

    /**
     * 任务输出信息（响应体核心数据）
     */
    @Data
    public static class Output implements Serializable {
        /**
         * 任务ID
         */
        @Alias("task_id")
        private String taskId;

        /**
         * 任务状态（枚举类型）
         */
        @Alias("task_status")
        private TaskStatusEnum taskStatus;

        /**
         * 任务提交时间
         */
        @Alias("submit_time")
        private String submitTime;

        /**
         * 任务执行时间
         */
        @Alias("scheduled_time")
        private String scheduledTime;

        /**
         * 任务完成时间
         */
        @Alias("end_time")
        private String endTime;

        /**
         * 任务结果列表（图片信息等）
         */
        @Alias("results")
        private List<ResultItem> results;

        /**
         * 任务结果统计
         */
        @Alias("task_metrics")
        private TaskMetrics taskMetrics;

        /**
         * 请求失败的错误码（成功时不返回）
         */
        @Alias("code")
        private String code;

        /**
         * 请求失败的详细信息（成功时不返回）
         */
        @Alias("message")
        private String message;

        /**
         * 输出信息统计
         */
        @Alias("usage")
        private Usage usage;

        /**
         * 请求唯一标识（用于溯源和排查问题）
         */
        @Alias("request_id")
        private String requestId;
    }

    /**
     * 任务结果列表中的单个项（生成的图片信息）
     */
    @Data
    public static class ResultItem implements Serializable {
        /**
         * 原始的输入prompt
         */
        @Alias("orig_prompt")
        private String origPrompt;

        /**
         * 开启智能改写后实际使用的prompt（不开启则不返回）
         */
        @Alias("actual_prompt")
        private String actualPrompt;

        /**
         * 生成图片的URL地址
         */
        @Alias("url")
        private String url;

        /**
         * 图像错误码（失败时返回）
         */
        @Alias("code")
        private String code;

        /**
         * 图像错误信息（失败时返回）
         */
        @Alias("message")
        private String message;
    }

    /**
     * 任务结果统计信息
     */
    @Data
    public static class TaskMetrics implements Serializable {
        /**
         * 总的任务数
         */
        @Alias("TOTAL")
        private Integer total;

        /**
         * 成功的任务数
         */
        @Alias("SUCCEEDED")
        private Integer succeeded;

        /**
         * 失败的任务数
         */
        @Alias("FAILED")
        private Integer failed;
    }

    /**
     * 输出信息统计（仅成功结果计数）
     */
    @Data
    public static class Usage implements Serializable {
        /**
         * 生成图片的数量
         */
        @Alias("image_count")
        private Integer imageCount;
    }
}


